#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll=long long;
const int N=1e5+10;

int flg[N];
int f[N];
bool vis[N];
int n,k;
struct node{
	int x,y,w;
	bool operator>(const node& p) const
	{
		return w>p.w;
		
	}
};
vector<node> v;
int Find(int x)
{
	if(f[x]!=x)
	{
		f[x]=Find(f[x]);
	}
	return f[x];
}
int main()
{
	cin>>n>>k;
	ll ret=0;
	for(int i=0;i<k;i++)
	{
		int t;
		scanf("%d",&t);
		vis[t]=1;
	}
	for(int i=1;i<n;i++)
	{
		node t;
		scanf("%d%d%d",&t.x,&t.y,&t.w);
		v.push_back(t);
		ret+=t.w;
	}
	sort(v.begin(),v.end(),greater<node>());
	for(int i=0;i<=n;i++)
	{
		f[i]=i;
	}
	for(int i=0;i<v.size();i++)
	{
		int x=Find(v[i].x),y=Find(v[i].y);
		if(vis[x] && vis[y])
		{
			continue;
		}
		f[x]=y;
		if(vis[x])
			vis[y]=1;
		if(vis[y])
			vis[x]=1;
		ret-=v[i].w;
	}
	cout<<ret<<endl;
	return 0;
	
}
